package com.planet.utils;

import org.apache.commons.lang.StringUtils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * Created by jiayazi on 17/8/1.
 */
public class TimeTools {


    /**
     * 获取下一个月的年月（例如：当前是2017-08，怎获取的是2017-09）
     * @return
     */
    public static String getNextYearMonth1() {
        Calendar cal = Calendar.getInstance();
        cal.add(cal.YEAR, 1);
        //cal.add(cal.MONTH, 1);
        SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM");
        String preMonth = dft.format(cal.getTime());
        return preMonth;
    }

    /**
     * 获取下一个月的年月（例如：当前是2017-08，怎获取的是2017-09）
     * @return
     */
    public static String getLastYearMonth() {
        Calendar cal = Calendar.getInstance();
        cal.add(cal.YEAR, 1);
        cal.add(cal.MONTH, -1);
        SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM");
        String preMonth = dft.format(cal.getTime());
        return preMonth;
    }

    /**
     * 获取下一个月的年月（例如：当前是2017-08，怎获取的是2017-09）
     * @return
     */
    public static Date getNextYearMonth2() {
        Calendar cal = Calendar.getInstance();
        cal.add(cal.YEAR, 1);
        cal.add(cal.MONTH, 1);
        return cal.getTime();
    }



    /**
     * 获取下一个月的年月（例如：当前是2017-08，怎获取的是2017-09）
     * @return
     */
    public static Date getNextMonth() {
        Calendar cal = Calendar.getInstance();
        cal.add(cal.MONTH, 1);
        return cal.getTime();
    }


    /**
     * 处理月份
     * @return
     */
    public static Date getMonth(Date time,int amount) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(time);

        cal.add(cal.MONTH, amount);
        return cal.getTime();
    }


    /**
     * 处理年份
     * @return
     */
    public static Date getYear(Date time,int amount) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(time);
        cal.add(cal.YEAR, amount);
        return cal.getTime();
    }

    /**
     * 处理年和月份
     * @return
     */
    public static Date getYearAndMonth(Date time,int yearAmount,int monthAmount) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(time);
        cal.add(cal.YEAR, yearAmount);
        cal.add(cal.MONTH, monthAmount);
        return cal.getTime();
    }




    /**
     * 获取下一个月的年月（例如：当前是2017-08，怎获取的是2017-09）
     * @return
     */
    public static String getNextYear() {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.YEAR, 1); // 年份
        SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM");
        Date resultDate = cal.getTime(); // 结果
        String preMonth = dft.format(resultDate);
        return preMonth;
    }


    /**
     * 推迟年份
     * @return
     */
    public static Date getTwoNextYear(int yearNum) {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.YEAR, yearNum); // 年份
        Date resultDate = cal.getTime(); // 结果
        return resultDate;
    }



    /**
     * 日期格式化 2017-08-01 16:55:00.0----->2017-08-01
     * @param dateStr
     * @return
     */
    public static String strGetYMD(String dateStr) {
        if (StringUtils.isEmpty(dateStr)){
            return null;
        }

        String[] date = dateStr.split(" ");
        return date[0];
    }


    /**
     * String转Date （精确到YMD）--->Tue Aug 01 00:00:00 CST 2017
     * @param dateStr
     * @return
     */
    public static Date formatStrToDate(String dateStr) {
        if (StringUtils.isEmpty(dateStr)){
            return null;
        }
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try {

            return sdf.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        return null;
    }

    /**
     * String转Date （精确到YMD）--->Tue Aug 01 00:00:00 CST 2017
     * @param dateStr
     * @return
     */
    public static Date formatStrToDate2(String dateStr) {
        if (StringUtils.isEmpty(dateStr)){
            return null;
        }
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
        try {

            return sdf.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        return null;
    }



    /**
     * String转时间戳
     * @param dateStr
     * @return
     */
    public static Long formatStrToLong(String dateStr) {
        if (StringUtils.isEmpty(dateStr)){
            return null;
        }
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try {

            //getTime()是获取当前时间戳（是毫秒），要除以1000得到秒
            return sdf.parse(dateStr).getTime()/1000;
        } catch (ParseException e) {
            e.printStackTrace();
        }

        return null;
    }


    /**
     * Date转String （精确到YMD）
     * @param date
     * @return
     */
    public static String formatDateToStr(Date date) {
        if (date==null){
            return null;
        }

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        return sdf.format(date);
    }


    /**
     * Date转String （精确到YMD）
     * @param date
     * @return
     */
    public static String formatDateToStr2(Date date) {
        if (date==null){
            return null;
        }

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
        return sdf.format(date);
    }


    /**
     * Date转String （精确到YMD）
     * @param date
     * @return
     */
    public static String formatDateToStr3(Date date) {
        if (date==null){
            return null;
        }

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sdf.format(date);
    }


    /**
     * 获取时间的年 数字
     * @return
     */
    public static int getYearNum(Date dateVO){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(dateVO);
        int year = calendar.get(Calendar.YEAR);
        return year;
    }

    /**
     * 获取时间的月 数字
     * @return
     */
    public static int getMonthNum(Date dateVO){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(dateVO);
        // 获取月，这里需要需要月份的范围为0~11，因此获取月份的时候需要+1才是当前月份值
        int month = calendar.get(Calendar.MONTH) + 1;
        return month;
    }

    /**
     * 获取时间的天 数字
     * @return
     */
    public static int getDayNum(Date dateVO){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(dateVO);
        // 获取日
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        return day;
    }

}
